//
//  main.m
//  c02 _BooL类型_关系运算符_逻辑运算符_IF_Switch_枚举
//
//  Created by dllo on 15/11/18.
//  Copyright © 2015年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>







/** 主函数*/
int main(int argc, const char * argv[]) {
   
#pragma mark - 知识点1 BOOL 数据类型

    {
#if 0
        BOOL result = 100;
        bool result2 = 100;
        _Bool result3 = 100;
        
        printf("%d\n", result);

      /**
       * BOOL 是OC中的类型,bool,_Bool是C中的类型
       * BOOL 的数值可以是除了0和1其它值
       *bool, _Bool无论赋什么值,结果只有0和1
       */
        BOOL isOn = YES;
        printf("isOn = %d\n", isOn);
        BOOL isOff = NO;
        printf("isOff = %d\n", isOff);
        
        BOOL isOpen;
        printf("isOpen = %d\n", isOpen);
        
#endif
        
    }


#pragma mark - 课堂练习
    {
        
    
    
    
    }
    
#pragma mark - 知识点2 关系运算符
    {
        /**
         * >,<,>=,<=,==,!=
         * 注意 : == 是判断是否相等
                 != 是判断不相等
                 ! 取反
         */
        
    }
#pragma mark - 课堂练习
#if 0
    {
        /**
         *练习1
         i<j<k 结果
         * 如果 i = 3, j = 4, k = 5
         * 如果 i = 4, j = 4, k = 5
         */
        int i = 3, j = 4, k = 5;
        
        BOOL result = i < j < k;
        printf("result=%d\n", result);
    
        
        
    
    }
#endif
    
#pragma mark - 知识点3 逻辑运算符
    
    {
    
        /**
         * &&, ||, !
         * &&, 逻辑与, 两边表达式都为真, 整个表达式结果才为真
         * ||, 逻辑或, 两边表达式都为假,整个表达式才为假
         
         * 注意短路问题,详见练习
         */
    
    
    
    }
#pragma mark - 课堂练习
#if 0
    {
        /**
         * 练习1:
         * 3>5 && 4<6  整个表达式结果?
         * 3<5 && 4<6  整个表达式结果?
         * 3==5 || 3<5 表达式的结果?
         * !0 结果?
         * !-1 结果?
         */
#if 0
        BOOL result1 = 3 > 5 && 4 < 6;
        /**< 里边有短路问题 */
        printf("result1 = %d\n", result1);
        BOOL result2 = 3 == 5 || 3 < 5;
        printf("result2 = %d\n", result2);
#endif
        /**
         * 输入一个整数,判断这个数是否在30到70的范围之间
         */
#if 0
        int number = 0;
        printf("请输入一个整数:");
        scanf("%d", &number);
        BOOL result = number > 30 && number < 70;
        printf("result = %d, number = %d\n", result, number);
//        BOOL result4 = 30 < number < 70; /**< 逻辑是错误的*/
//        printf("result4 = %d\n", result4);
#endif
    
    }
#endif
    
#pragma mark - 知识点4 if语句 if else  级联式if 语句
    {
        /** 
         *
         */
    
    
    }
#pragma mark - 课堂练习
#if 0
    {
        //** 控制台输入一个字符, 如果是m输出男性,否则什么都不输出 */
#if 0
        char sex = 0;
        printf("请输入一个字符:");
        scanf("%c", &sex);
        
        /** 判断 */
        if (sex == 'm') {
            printf("male\n");
            
        }
#endif
        /**
         * 输入一个 年份，判断该年份是否是闰年？如果是闰年，则输出该年是闰年，否则输出该年不是闰年
         (提示：闰年：能被400整除或者能被4整除，但是不能被100整除。)
         
        if (条件表达式1) {
            语句2
        } else (条件表达式2){
            语句2
        }
         */
#if 0
        int year = 0;
        printf("请输入一个年份:");
        scanf("%d", &year);
        if ((year % 400 == 0) || (year % 4 == 0 && year % 100 !=0)) {
            printf("YES");
            
        } else {
            printf("NO");
            
        }
#endif
#endif
        
        /** 
         * 控制台任意两个整数,找出最大值*/
//#if 0
//        int a = 0;
//        int b = 0;
//        printf("输入两个整数:");
//        scanf("%d%d", &a, &b);
//        if (a>b) {
//            printf("%d, a");
//        } else {
//            printf("%d, b");
//        }
//        
//#endif
        
        /** 判断输入的数字(1-100) 是否是7的倍数,是否包含7 (%可以判断倍数,还可以取出数字的位)*/
//        int  number = 0;
//        printf("输入一个1-100之间的整数:");
//        scanf("%d", &number);
//        
//        if (number % 7 == 0 ||(number % 10 == 7) || number / 10 == 7) {
//            printf("符合条件\n");
//        }
//        
        
        
//        if (条件1) {
//            语句1;
//        } else if (条件2){
//            语句2;
//        } else{
//            语句3
//        }
        
        /**
         * 控制台输入字符m(男)、f（女）,m输出男性，f输出女性。如果即没有输入'm'，又没有输入'f'，性别是什么呢？
         */
#if 0
        char sex = 0;
        printf(" 输入一个字符 ");
        scanf("%c", &sex);
        if (sex == 'm') {
            printf("man\n");
        } else if (sex == 'f'){
            printf("women\n");
        } else {
            printf("不是人");
        
        };
        
      
        
        
        
        
        
        
        
        
      }
    
#endif
#pragma mark - 知识点5 条件运算符
    {
        /** 
         * ?, :
         * a > b ? a : b
         * 如果a > b, 结果为a, 否则结果为b
         */
    }
    
    
#pragma mark - 课堂练习
#if 0
    {
        /** 输入两个数  求最大值*/
        
        int a =0;
        int b =0;
        int max =0;
        printf("输入两个实数:");
        scanf("%d%d", &a, &b);
        max = a > b ? a : b;
        printf("max = %d\n", max);
        
        
    
    
    
    }
#endif
#pragma mark - 知识点6 switch 语句
    {
//        switch (<#expression#>/*整型表达式) {
//            case <#constant#>/*常量/:
//                <#statements#>/语句1/
//                break;
        
//                
//            default:
//                    语句3;
//                break;
        
        
    }
    
#pragma mark - 课堂练习
    {
#if 0    /** 从控制台输入1-4,对应打出春夏秋冬的英文词 */
    int number = 0;
    printf("请输入数字(1 - 4):");
    scanf("%d", &number);
    
    /** switch 分支实现*/
    switch (number) {
        case 1:
            printf("Spring\n");
            break;
        case 2:
            printf("Summer\n");
            break;
        case 3:
            printf("Autumn\n");
            break;
        case 4:
            printf("Winter\n");
            break;
        default:
            printf("input error!");
            break;
    }
#endif
     /** 
      * 分机号  输入分机号 输出相应的部门
      * 8001 ~ caiwu
        8002 ~ jishu
        8003 ~ renshi
        8004 ~ bangongshi
        8005 ~ houqin
      * 其他号码 提示无此号码,请重新输入
      */
#if 0
        int number = 0;
        printf("请输入分机号:");
        scanf("%d", &number);
        switch (number) {
            case 8001:
                printf("caiwu\n");
                break;
            case 8002:
                printf("jishu\n");
                break;
            case 8003:
                printf("renshi\n");
                break;
            case 8004:
                
                
            default:
                printf("无效号码 重新输入\n");
                break;
        }
#endif
        
        
        
        }
#pragma mark - 知识点7 枚举 enum
    {
        
    /** 
     * 枚举是一种数据类型, 类似char int
     */
        
    


        
        
#if 0 /** 从键盘输入一个字符，如果是数字打印 this is digital，如果是大写字母，打印 this is  capital letter，如果是小写字母，打印 this is letter，如果是其他字符，打印 other。*/
        char c = 0;
        printf("请输入一个字符:");
        scanf("%c", &c);
        if (c >= 0 && c <= 9){
            printf("数字\n");
        }else if (c >= 'a' && c <= 'z'){
            printf("小写字母\n");
        }else if (c >= 'A' && c <= 'Z'){
            printf("小写字母\n");
        }else {
            printf("other\n");
        }
        
        
        
    
#endif
        
        
    }
#pragma mark - 课堂练习
#if 0
    {
#if 0
    
    enum season {
        spring,
        summer,
        autumn,
        winter
    };
    
    /* 定义一个枚举变量 */
    enum season s = 0;/**< enum season 相当于 int*/
    
    printf("输入一个整数(0-3):");
    scanf("%d", &s);
     
    switch (s) {
        case spring:
            printf("春天\n");
            break;
            case summer:
            printf("夏天\n");
            break;
            case autumn:
            printf("秋天\n");
            break;
            case winter:
            printf("冬天\n");
            break;
            
        default:
            break;
    }
    
#endif
    

    enum phonenumber {
        caiwu = 8001,
        jishu,
        renshi,
        bangongshi
    };
    
    enum phonenumber phone = 0;
    
    printf("输入一个电话号码:\n");
    scanf("%d", &phone);
    
    switch (phone) {
        case caiwu:
            
            printf("财务\n");
            break;
        case jishu:
            printf("技术\n");
            break;
            case renshi:
            printf("人事\n");
            break;
            case bangongshi:
            printf("办公室\n");
            break;
            
            
        default:
            break;
    }
    }
    
#endif 
    
    
    
    return 0;
}
